django 您所在的位置:网站首页 zone settings django

django

2023-09-05 06:44| 来源: 网络整理| 查看: 265

目录 一: Django出现的时间问题:二:Django如何开启时区支持?三:USe_TZ = True的效应:四: 了解django的配置文件:五:区分两类datetime对象验证:时区关闭时:django使用的timezone。验证:时区开启时:django使用的timezone。 六:datetime模块中的类七: datetime的常见用法:八:date的常用用法:九:Django的时区转换:

一: Django出现的时间问题:

问题描述: 不同时区的人所在的时间是不同的,如果都采用当地时间,那么导致数据库存储的时间,并不是同一时刻的时间。但如果都采用0时区时间,那么不在0时区的用户就会看到错误的时间,怎么做呢?

解决方案: 在代码和数据库中都采用UTC时间(0时区时间),在和用户交互的时候采用当地时间。

二:Django如何开启时区支持?

1: 在配置文件中配置:

USE_TZ = True

2: 配置文件指定自己所在的时间戳(不指定默认是0时区)

LANGUAGE_CODE = 'zh-hans' # 语言:简体中文 TIME_ZONE = 'Asia/Shanghai' # 亚洲上海

3: 安装pytz模块:(时区转换专用模块)

pip install pytz -i https://pypi.tuna.tsinghua.edu.cn/simple 三:USe_TZ = True的效应: 作用一:前端传递过来的DateFiled类型,经过模型类,存到数据库中,全部是0时区时间。作用二: 后端自己写的代码,只要是使用timezone获取的时间(已知的时间)(带时区的时间),django会自己转换,无需我们手动转换。作用三:模板显示问题:django模板,会将数据库中0时区的时间转换成当地时间,无需我们自己转换。

总结:

1:django中推荐使用USE_TZ = True,让数据库存储0时区时间。 2:django后端使用timezone获取当地时间,不使用原生的datetime。 3:django模板无需考虑时区问题,django将自动转换。 4:USE_TZ = True,和 TIME_ZONE = ‘Asia/Shanghai’ # 亚洲上海必须设置。

四: 了解django的配置文件:

1:如果在没有django项目的情况下,django使用的自己的配置文件。

python3.5.2/site_packages/django/conf/global_settings 在django项目的依赖包中寻找到。

2: django项目下,django启动的是

项目中的settings文件

五:区分两类datetime对象

1: 时区关闭时,django使用原生的datetime对象保存本地时间。 2: 时区开启时,django使用已知的datetime对象保存本地时间。

验证:时区关闭时:django使用的timezone。

注意:此时使用的是global_settings配置文件,不存在USE_TZ = True这个配置项。

python@ubuntu:~$ workon django_env (django_env) python@ubuntu:~$ python3 >>> from django.conf import settings >>> settings.configure() >>> from django.utils import timezone >>> now = timezone.now() >>> now datetime.datetime(2020, 10, 27, 21, 34, 48, 517250)

结论:当关闭时区时,django 使用原生的 datetime 对象保存本地时间。

验证:时区开启时:django使用的timezone。

注意:此时我们进入django项目中使用python3 manager.py shell进入django环境:

(django_env) python@ubuntu:~/Desktop/shopping-mall-project/shopping_mall$ python3 manage.py shell >>> from django.utils import timezone >>> now = timezone.now() >>> now datetime.datetime(2020, 10, 27, 13, 40, 35, 544740, tzinfo=) >>> new = timezone.localtime() >>> new datetime.datetime(2020, 10, 28, 8, 24, 1, 906910, tzinfo=)

结论: 时区开启时,django使用已知的datetime对象保存本地时间。使用localtime获取的是本地东八区的时间。(注意:,TIME_ZONE = ‘Asia/Shanghai’, 这个配置项必须存在才可以)。

六:datetime模块中的类 date类: 日期对象(年,月,日)time类:时间对象(时,分, 秒,微秒)datetime类:日期时间对象 (年,月,日,时,分,秒,微秒)timedelta类:时间间隔对象tzinfo类:时区信息对象。 七: datetime的常见用法:

注意: 由于timezone返回的对象也是datetime对象,所以方法同样试用。

1: 获取当地是时间(年,月,日,时,分,秒,微秒): >>> datetime.datetime.now() datetime.datetime(2020, 10, 28, 8, 34, 56, 588940) >>> today = datetime.datetime.today() >>> today datetime.datetime(2020, 10, 28, 8, 50, 34, 43761) 2:将时间转换成(时,分,秒,微秒) >>> new_time = datetime.datetime.now() >>> new_time.time() datetime.time(8, 38, 24, 280548) 3:将时间转换成(年,月,日) >>> now_time = datetime.datetime.now() >>> now_time.date() datetime.date(2020, 10, 28) 4:时间的加减计算: # 时间点-时间间隔 = 时间点 >>> import datetime >>> now_time = datetime.datetime.now() >>> now_time datetime.datetime(2020, 10, 28, 8, 47, 30, 232944) >>> day_3_ago = now_time - datetime.timedelta(days = 3) >>> day_3_ago datetime.datetime(2020, 10, 25, 8, 47, 30, 232944) 5:格式化日期转换成datetime对象: >>> datetime.datetime.strptime('2017-3-22 15:25','%Y-%m-%d %H:%M') datetime.datetime(2017, 3, 22, 15, 25) 八:date的常用用法: 1: date对象获取年月日: >>> date_today = datetime.date.today() >>> date_today datetime.date(2020, 10, 28) >>> date_today.year 2020 >>> date_today.month 10 >>> date_today.day 28 2:日期比较大小 >>> a = datetime.date(2020, 10, 28) >>> b = datetime.date(2020, 10, 27) >>> a.__eq__(b) # 相等 False >>> a.__gt__(b) # 大于 True >>> a.__lt__(b) # 小于 False >>> a.__le__(b) # 小于等于 False >>> a.__lt__(b) # 大于等于 False >>> a.__ne__(b) # 不等于 True 3:replace替换: >>> today_date = datetime.date.today() >>> today_date datetime.date(2020, 10, 28) >>> today_date = today_date.replace(year = today_date.year, month = today_date.month, day = 3) >>> today_date datetime.date(2020, 10, 3) 九:Django的时区转换:

1: astimezone的使用:将一个时间对象(datetime)转换成UTC时间对象(datetime)

import datetime import pytz utc = pytz.timezone('UTC') now_time = datetime.datetime.now() utc_time = now_time.astimezone(tz=utc) print(now_time,utc_time)

2: pytz.timezone(‘时区名’):此方法能获取一个tzinfo对象,该对象可在datetime生成时间中以参数的形式放入,即可生成对应时区的时间。

>>>utc = pytz.timezone('UTC') >>>datetime.datetime.now(tz=utc) 2019-05-10 10:53:46.000929+00:00

实际的时间是:18:53:46



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有